Ollydbg异常处理设置项

打开ollydbg点击"选项"-"Debugging options"-"Exceptions"用于设置异常出现时od的默认处理行为。

windows异常机制中对异常的处理为:第一次异常处理过程中,先寻找调试器,如果调试器能处理异常,则结束异常处理流程,否则将异常交由程序的VEH/SEH机制处理;如果程序处理了异常,则结束异常处理,否则,windows进行第二次异常处理过程。"Ignore (pass to program) following exception"下的复选框被勾选/取消时,将影响Od第一次异常处理的行为。当复选框被勾选时,od收到异常后,返回"异常未处理"给系统,进而由应用程序来处理异常;当复选框未被勾选,od返回"异常已处理"给系统,由此停止异常处理流程。

接下来,我们用一段程序来说明这个结论,在main函数中触发av异常,如果在第一轮异常处理中,Od处理了异常,则不会进入exceptFilter异常过滤函数;反之,程序会进入exceptFilter函数,并以此输出"filter"和"end":

 

#include <stdio.h>

int exceptFilter()
{
	printf("filter\n");

	return 1;
}

int _tmain(int argc, _TCHAR* argv[])
{
	if(argc==1)
	{
		__try
		{
			*(int*)0=1;
		}
		__except(exceptFilter())
		{}
	}
	printf("End\n");
	return 0;
}

 

 

先来看下av项未被勾选,程序运行到*(int*)0=1时的情况:

这种情况下,任由我按F7单步运行,程序一直卡死在指令:

 

010E10A5     C7             DB C7

并在Od底部显示"Access violation...use Shift+F9 to pass exception to pragram". 

 


为什么有这样的现象?很简单,因为Od返回异常已处理,但事实是异常还在,下一次运行这条指令时还会触发av异常,这次Od又返回异常已处理。如此往复,就显得程序卡死在这条指令上。如果我们按Od的提示,按下"shift+F9"则会使程序进入exceptFilter函数。

现在,我们勾选av复选框,让od不处理异常,然后重启程序,程序顺利进入异常处理函数exceptFilter,并没有卡死在av指令上:

POC~

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值